GCC 옵션만으로 프로그램을 더욱 빠르게 만들수 없을까요?

puaxx의 이미지

제가 어셈블리는 잘 모르는지라..

GCC 컴파일 옵션만으로 프로그램을 더욱 빠르게 만들수는 없을까요?

수천만건(수십기가)의 데이터를 가공해야 되는데 지금 기본 옵션으로 만들어진 프로그램은 1~2시간이 걸리네요.더욱 단축할순 없을까요? 어셈블리 쓰는 방법밖에는 없는지?

사랑천사의 이미지

gcc -O3(or -O2) -o program source.c

이런거... -O3가 -O2보다 한단계 더 최적화를 시키는.. 흠흠. 것인데.. 좀 위험하기도 합니다. 프로그램에 따라선 그렇게 하면 동작을 제대로 안 하는 경우도 생깁니다.
----
일어나라! 싸워라! 그리고 이겨라!
다만!!! 의미 있는 것에 그 힘을!!!
그 능력과 노력을!!!

사람천사

kslee80의 이미지

기본 상태보다는 효과가 있지만...
말씀하신 것 처럼 정상적인 동작을 안 하는 경우도 있으며,

-O3 보다 -O2 가 더 빠른 경우도 있습니다 -_-;;;

only2sea의 이미지

GCC 옵션으로 컨트롤 플로우를 바꾼다거나 함수를 인라인으로 만든다거나 프레임 포인터를 제거한다던지 여러가지 다양한 최적화 옵션이 있습니다.

하지만!!! 하드웨어의 성능을 향상시켜주지 못하며, 알고리즘적인 문제를 해결해주는 것은 아닙니다.

수십기가의 데이터를 가공하는데 시간이 많이 걸리신다면, 이건 GCC에서 컨트롤 플로우를 조정한다고 별로 효과를 기대하긴 어렵다고 생각합니다. 결국 자료 구조쪽에 신경을 쓰셔야 합니다. 단지 복잡도의 문제가 아니라 external data를 처리하는 것이므로, 디스크 액세스를 최소한으로 줄여야 할 겁니다.

이제는 서명에 무엇을 써야하는지 생각해보자.

kslee80의 이미지

일단은 단순하게 -O2 옵션을 줘서 시도해 볼 수도 있지만,

그래도 별다른 효과가 없는 경우에는 프로파일링을 해 보시기를 권합니다.

프로파일링 데이터가 확보된다면 시도할만한 최적화 여지는 많아집니다.
특정 함수가 과도하게 많은 호출이 된다면 해당 함수의 코드상 최적화를 시도할 수 있겠고...
호출 횟수에 비해 프로그램 수행시간에 차지하는 비율이 높은 함수라면 함수의 동작 로직을 전체적으로 점검해볼 필요가 있겠죠.
파일 I/O 부분에서 시간이 오래 걸린다면 파일에서 데이터를 얻어오는 방식의 변화라던지, 더 빠른 I/O 장비로 교체한다던지
하는 방법도 시도할 수 있겠죠.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.