คำถามติดแท็ก optimization

การปรับให้เหมาะสมคือการปรับปรุงวิธีหรือการออกแบบ ในการเขียนโปรแกรมการปรับให้เหมาะสมมักจะอยู่ในรูปแบบของการเพิ่มความเร็วของอัลกอริทึมหรือลดทรัพยากรที่ต้องการ ความหมายของการเพิ่มประสิทธิภาพก็คืออัลกอริธึมการเพิ่มประสิทธิภาพเชิงตัวเลขที่ใช้ในการเรียนรู้ของเครื่อง

3
กฎ“ as-if” คืออะไร?
ตามชื่อเรื่องว่า กฎ "as-if" คืออะไร? คำตอบทั่วไปที่เราจะได้รับคือ: กฎที่อนุญาตให้มีการแปลงรหัสใด ๆ และทั้งหมดที่ไม่เปลี่ยนแปลงพฤติกรรมที่สังเกตได้ของโปรแกรม ในบางครั้งเรามักจะได้รับพฤติกรรมจากการใช้งานบางอย่างซึ่งเป็นผลมาจากกฎนี้ ผิดหลายครั้ง. แล้วกฎนี้คืออะไรกันแน่ มาตรฐานไม่ได้กล่าวถึงกฎนี้อย่างชัดเจนว่าเป็นส่วนหรือย่อหน้าดังนั้นอะไรที่อยู่ภายใต้ขอบเขตของกฎนี้? สำหรับฉันแล้วดูเหมือนว่าเป็นพื้นที่สีเทาซึ่งไม่ได้กำหนดรายละเอียดโดยมาตรฐาน ใครสามารถอธิบายรายละเอียดที่อ้างถึงการอ้างอิงจากมาตรฐานได้อย่างละเอียด? หมายเหตุ: แท็กสิ่งนี้เป็น C และ C ++ ทั้งคู่เนื่องจากเกี่ยวข้องกับทั้งสองภาษา
90 c++  c  optimization  c++-faq  as-if 

10
ดูและล้างแคช / บัฟเฟอร์ Postgres หรือไม่
บางครั้งฉันเรียกใช้แบบสอบถาม Postgres ใช้เวลา 30 วินาที จากนั้นฉันเรียกใช้แบบสอบถามเดียวกันทันทีและใช้เวลา 2 วินาที ดูเหมือนว่า Postgres มีแคชบางประเภท ฉันสามารถดูสิ่งที่แคชถืออยู่ได้หรือไม่? ฉันสามารถบังคับให้ล้างแคชทั้งหมดเพื่อวัตถุประสงค์ในการปรับแต่งได้หรือไม่? หมายเหตุ: โดยพื้นฐานแล้วฉันกำลังมองหาเวอร์ชัน postgres ของคำสั่ง SQL Server ต่อไปนี้: DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS แต่ฉันก็อยากรู้วิธีดูว่ามีอะไรอยู่ในบัฟเฟอร์นั้นจริงๆ ขอบคุณสำหรับความช่วยเหลือ

12
การใช้ฟังก์ชันที่ไม่ระบุชื่อมีผลต่อประสิทธิภาพหรือไม่?
ฉันสงสัยว่ามีความแตกต่างด้านประสิทธิภาพระหว่างการใช้ฟังก์ชันที่มีชื่อและฟังก์ชันที่ไม่ระบุชื่อใน Javascript หรือไม่ for (var i = 0; i < 1000; ++i) { myObjects[i].onMyEvent = function() { // do something }; } เทียบกับ function myEventHandler() { // do something } for (var i = 0; i < 1000; ++i) { myObjects[i].onMyEvent = myEventHandler; } ข้อแรกเป็นระเบียบกว่าเนื่องจากไม่ทำให้โค้ดของคุณยุ่งเหยิงด้วยฟังก์ชันที่ไม่ค่อยได้ใช้งาน แต่คุณจะประกาศฟังก์ชันนั้นซ้ำหลายครั้งหรือไม่?

2
GCC: March ต่างจาก mtune อย่างไร?
ฉันพยายามขัดหน้า GCC man สำหรับสิ่งนี้ แต่ก็ยังไม่ได้รับจริงๆ อะไรคือความแตกต่างระหว่าง-marchและ-mtune? เมื่อใดที่ใช้เพียงแค่-marchเทียบกับทั้งสองอย่าง เป็นไปได้ไหมที่จะเพียง-mtune?

1
เหตุใดรหัส Haskell นี้จึงทำงานช้าลงด้วย -O
ชิ้นส่วนของรหัส Haskell นี้จะทำงานมากช้า-Oแต่-Oควรจะไม่เป็นอันตราย ใครช่วยบอกทีว่าเกิดอะไรขึ้น? หากเป็นเรื่องสำคัญมันเป็นความพยายามที่จะแก้ปัญหานี้และใช้การค้นหาแบบไบนารีและโครงสร้างส่วนต่อเนื่อง import Control.Monad import Data.Array data Node = Leaf Int -- value | Branch Int Node Node -- sum, left child, right child type NodeArray = Array Int Node -- create an empty node with range [l, r) create :: Int -> Int -> Node create …

5
การเพิ่ม 'LIMIT 1' ในการสืบค้น MySQL ทำให้เร็วขึ้นเมื่อคุณรู้ว่าจะมีผลลัพธ์เพียง 1 รายการหรือไม่?
เมื่อฉันเพิ่ม LIMIT 1 ลงในแบบสอบถาม MySQL จะหยุดการค้นหาหรือไม่หลังจากพบผลลัพธ์ 1 รายการ (ทำให้เร็วขึ้น) หรือยังคงดึงผลลัพธ์ทั้งหมดและตัดทอนในตอนท้าย?

8
เหตุใดโอเปอเรเตอร์จึงช้ากว่าการเรียกใช้เมธอดมาก (โครงสร้างจะช้าลงเฉพาะใน JIT ที่เก่ากว่า)
Intro: ฉันเขียนโค้ดประสิทธิภาพสูงใน C # ใช่ฉันรู้ว่า C ++ จะให้การเพิ่มประสิทธิภาพที่ดีขึ้น แต่ฉันก็ยังเลือกที่จะใช้ C # ฉันไม่ต้องการที่จะอภิปรายทางเลือกนั้น แต่ฉันอยากได้ยินจากคนที่พยายามเขียนโค้ดประสิทธิภาพสูงบน. NET Framework คำถาม: เหตุใดตัวดำเนินการในรหัสด้านล่างจึงช้ากว่าการเรียกเมธอดเทียบเท่า ?? เหตุใดวิธีการส่งผ่านสองคู่ในโค้ดด้านล่างเร็วกว่าวิธีการที่เทียบเท่ากันโดยผ่านโครงสร้างที่มีสองคู่อยู่ภายใน (A: JIT รุ่นเก่าปรับโครงสร้างให้เหมาะสมไม่ดี) มีวิธีรับ. NET JIT Compiler เพื่อจัดการโครงสร้างอย่างง่ายได้อย่างมีประสิทธิภาพเทียบเท่ากับสมาชิกของโครงสร้างหรือไม่ (A: รับ JIT ใหม่กว่า) สิ่งที่ฉันคิดว่าฉันรู้: คอมไพเลอร์. NET JIT ดั้งเดิมจะไม่อินไลน์อะไรที่เกี่ยวข้องกับโครงสร้าง ควรใช้โครงสร้างที่แปลกประหลาดเฉพาะเมื่อคุณต้องการประเภทค่าขนาดเล็กที่ควรปรับให้เหมาะสมเช่นบิวท์อิน แต่เป็นจริง โชคดีที่ใน. NET 3.5SP1 และ. (ฉันเดาว่าพวกเขาทำอย่างนั้นเพราะไม่เช่นนั้นโครงสร้างซับซ้อนใหม่ที่พวกเขาแนะนำจะมีประสิทธิภาพที่น่ากลัว ... ไม่เกี่ยวข้องกับปัญหานี้มากเกินไป สิ่งที่การทดสอบของฉันแสดงให้เห็น: ฉันได้ตรวจสอบแล้วว่าฉันมี JIT Optimizer รุ่นใหม่กว่าโดยตรวจสอบว่าไฟล์ …

8
ทำไม GDB จึงกระโดดข้ามบรรทัดอย่างไม่คาดคิดและพิมพ์ตัวแปรเป็น“ <value optimized out>”
ใครช่วยอธิบายพฤติกรรมของ gdb นี้ได้บ้าง? 900 memset(&amp;new_ckpt_info,'\0',sizeof(CKPT_INFO)); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_** HDR),i_offset); (gdb) **903 prev_offset = cp_node-&gt;offset;** (gdb) **905 m_CPND_CKPTINFO_READ(ckpt_info,(char *)cb-&gt;shm_addr.ckpt_addr+sizeof(CKPT_ HDR),i_offset);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** (gdb) **910 bitmap_value = cpnd_client_bitmap_set(client_hdl%32);** (gdb) **908 bitmap_offset = client_hdl/32;** …

2
เหตุใดสวิตช์จึงไม่ปรับให้เหมาะสมในลักษณะเดียวกับการผูกมัดในกรณีอื่นใน c / c ++
การดำเนินการตามตารางต่อไปนี้จะสร้างชุดของคำสั่ง cmp / je อย่างที่ฉันคาดหวังว่าจะถูกล่ามโซ่หากข้อความ: int square(int num) { if (num == 0){ return 0; } else if (num == 1){ return 1; } else if (num == 2){ return 4; } else if (num == 3){ return 9; } else if (num == 4){ return 16; } else if …

3
การปรับฟังก์ชั่นวัตถุประสงค์ R ให้เหมาะสมกับ Rcpp ช้าลงทำไม?
ขณะนี้ฉันกำลังทำงานกับวิธีแบบเบย์ที่ต้องการหลายขั้นตอนของการเพิ่มประสิทธิภาพของแบบจำลองการบันทึกหลายส่วนต่อการวนซ้ำ ฉันใช้ optim () เพื่อดำเนินการ optimisations เหล่านั้นและฟังก์ชั่นวัตถุประสงค์ที่เขียนใน R การทำโปรไฟล์เปิดเผยว่า optim () เป็นคอขวดหลัก หลังจากขุดไปรอบ ๆ ฉันพบคำถามนี้ซึ่งพวกเขาแนะนำว่าการบันทึกฟังก์ชันวัตถุประสงค์ด้วยRcppสามารถทำให้กระบวนการเร็วขึ้น ฉันทำตามข้อเสนอแนะและบันทึกฟังก์ชั่นวัตถุประสงค์ของฉันRcppใหม่ แต่มันก็ช้าลง (ช้าลงประมาณสองเท่า!) นี่เป็นครั้งแรกของฉันที่มีRcpp(หรืออะไรก็ตามที่เกี่ยวข้องกับ C ++) และฉันไม่สามารถหาวิธีการเขียนโค้ดเวกเตอร์ได้ มีความคิดอย่างไรที่จะทำให้เร็วขึ้น? Tl; dr: การใช้งานฟังก์ชั่นปัจจุบันใน Rcpp ไม่เร็วเท่ากับ vectorised R; จะทำให้เร็วขึ้นได้อย่างไร? ตัวอย่างที่ทำซ้ำได้ : 1) กำหนดฟังก์ชั่นวัตถุประสงค์ในRและRcpp: ความน่าจะเป็นของการสกัดกั้นแบบจำลองแบบมัลติโนเมียลเท่านั้น library(Rcpp) library(microbenchmark) llmnl_int &lt;- function(beta, Obs, n_cat) { n_Obs &lt;- length(Obs) Xint &lt;- matrix(c(0, …
16 c++  r  optimization  rcpp 

3
วิธีที่เร็วที่สุดในการค้นหาผลิตภัณฑ์ขั้นต่ำขององค์ประกอบ 2 แถวที่มีองค์ประกอบมากกว่า 200,000 รายการ
ฉันมีอาเรa[n]ย์ หมายเลขnถูกป้อนโดยเรา ฉันต้องการค้นหาผลิตภัณฑ์ขั้นต่ำa[i]และa[j]ถ้า: 1) abs(i - j) &gt; k 2) a[i] * a[j]ย่อเล็กสุด นี่คือทางออกของฉัน (ไร้เดียงสามาก): #include &lt;iostream&gt; using namespace std; #define ll long long int main() { ll n,k; cin &gt;&gt; n &gt;&gt; k; ll a[n]; for(ll i=0;i&lt;n;i++) cin &gt;&gt; a[i]; ll mn; bool first = true; for(ll i=0;i&lt;n;i++) { …

2
Java: ลูปที่ไม่ได้ควบคุมด้วยตนเองยังคงเร็วกว่าลูปดั้งเดิม ทำไม?
ลองพิจารณาตัวอย่างของโค้ดสองชุดต่อไปนี้ในอาร์เรย์ที่มีความยาว 2: boolean isOK(int i) { for (int j = 0; j &lt; filters.length; ++j) { if (!filters[j].isOK(i)) { return false; } } return true; } และ boolean isOK(int i) { return filters[0].isOK(i) &amp;&amp; filters[1].isOK(i); } ฉันคิดว่าประสิทธิภาพของสองชิ้นนี้ควรจะคล้ายกันหลังจากการวอร์มอัพเพียงพอ ฉันได้ตรวจสอบสิ่งนี้โดยใช้กรอบการเปรียบเทียบไมโคร JMH ตามที่อธิบายไว้เช่นที่นี่และที่นี่และสังเกตว่าตัวอย่างที่สองนั้นเร็วกว่า 10% คำถาม: ทำไม Java ถึงไม่ปรับข้อมูลโค้ดแรกของฉันให้ดีขึ้นโดยใช้เทคนิคการปลดลูปพื้นฐาน โดยเฉพาะฉันต้องการทำความเข้าใจสิ่งต่อไปนี้: ฉันสามารถผลิตรหัสที่เป็นที่เหมาะสมสำหรับกรณีของ 2 ตัวกรองและยังคงสามารถทำงานในกรณีของหมายเลขอื่นของตัวกรอง (จินตนาการสร้างง่าย) …

4
มีข้อมูลโค้ด C ที่คำนวณการเพิ่มความปลอดภัยมากเกินไปอย่างมีประสิทธิภาพโดยไม่ใช้คอมไพเลอร์ builtins หรือไม่
นี่คือฟังก์ชั่น C ที่เพิ่มintอีกอันหนึ่งซึ่งล้มเหลวหากเกิดโอเวอร์โฟลว์: int safe_add(int *value, int delta) { if (*value &gt;= 0) { if (delta &gt; INT_MAX - *value) { return -1; } } else { if (delta &lt; INT_MIN - *value) { return -1; } } *value += delta; return 0; } น่าเสียดายที่GCC หรือ Clang นั้นไม่ได้รับการปรับปรุงอย่างดี : safe_add(int*, …

1
อัลกอริทึมการตัดสตริงที่มีประสิทธิภาพโดยลบคำนำหน้าและคำต่อท้ายเท่ากันตามลำดับ
การ จำกัด เวลาต่อการทดสอบ: 5 วินาทีการ จำกัด หน่วยความจำต่อการทดสอบ: 512 เมกะไบต์ คุณได้รับสตริงที่มีsความยาวn( n≤ 5000) คุณสามารถเลือกคำนำหน้าใด ๆ ที่เหมาะสมของสายนี้ที่ยังต่อท้ายและลบคำนำหน้าเลือกหรือคำต่อท้ายที่สอดคล้องกัน จากนั้นคุณสามารถใช้การดำเนินการแบบอะนาล็อกกับสตริงผลลัพธ์และอื่น ๆ ความยาวต่ำสุดของสตริงสุดท้ายคืออะไรซึ่งสามารถทำได้หลังจากใช้ลำดับที่เหมาะสมของการดำเนินการดังกล่าว อินพุต บรรทัดแรกของการทดสอบแต่ละครั้งประกอบด้วยสตริงsที่ประกอบด้วยตัวอักษรภาษาอังกฤษตัวเล็ก ๆ เอาต์พุต เอาต์พุตจำนวนเต็มเดียว - ความยาวต่ำสุดของสตริงสุดท้ายที่สามารถทำได้หลังจากใช้ลำดับที่เหมาะสมของการดำเนินการดังกล่าว ตัวอย่าง +-------+--------+----------------------------------+ | Input | Output | Explanation | +-------+--------+----------------------------------+ | caaca | 2 | caaca → ca|aca → aca → ac|a → ac | …

3
ฉันสามารถปิดการปรับให้เหมาะสมได้หรือไม่ดังนั้นตัวแปรในขอบเขตจากการปิดจะไม่“ ปรับให้เหมาะสม”
ในฐานะที่เป็นผลพลอยได้จากการเพิ่มประสิทธิภาพรหัสที่ทำโดยเบราว์เซอร์ที่ทันสมัยในขณะที่การดีบักคุณไม่สามารถ "เห็น" ตัวแปรทั้งหมดที่ "จริง" อยู่ในขอบเขต นี้เป็นที่รู้จักกันดีและได้รับการแก้ไขในคำถามก่อนหน้านี้ที่นี่ใน SO คุณลักษณะนี้ในขณะที่การใช้งานในการผลิตเป็นสิ่งที่สร้างความรำคาญให้ฉันอย่างมากในระหว่างการพัฒนามันทำให้ฉันช้าลง (ซึ่งควรจะชัดเจน) ตอนนี้คำถามของฉันคือมีวิธีที่จะปิดพฤติกรรมนี้หรือไม่ ฉันสามารถแก้ไขไฟล์กำหนดค่าบางอย่างหรือมีปลั๊กอินของเบราว์เซอร์หรืออาจจะมี "รุ่นต่อสร้างพิเศษสำหรับนักพัฒนา" ของเบราว์เซอร์ที่สามารถใช้งานได้? ฉันชอบที่จะพิมพ์รหัสของฉันลงในคอนโซลทันทีที่ฉันเขียนรหัสใหม่ดังนั้นนี่เป็นการบักฉันจริงๆ อัปเดต / แก้ไข นี่คือทางออกบางส่วนให้เครดิตกับ Paul1365972 คุณต้องเริ่มเบราว์เซอร์ chrome จากบรรทัดคำสั่งด้วยตัวเลือกพิเศษเช่น: ปิด Chrome อย่างสมบูรณ์ เรียกใช้ Chrome จากคอนโซลด้วย"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" --js-flags="--allow-natives-syntax" สำหรับ Windows ระบบปฏิบัติการอื่นที่คล้ายคลึงกัน "%GetHeapUsage()"เปิดคอนโซลนักพัฒนาและดำเนินการ หากคุณเริ่มต้น Chrome อย่างถูกต้องด้วยตัวเลือกตัวเลขจะถูกบันทึกไว้ในคอนโซลมิฉะนั้นคุณจะได้รับข้อผิดพลาดทางไวยากรณ์ ด้วยการตั้งค่าสถานะบรรทัดคำสั่งนี้คุณสามารถ 'คุยกับเครื่องยนต์ V8' ด้วยคำสั่งที่ขึ้นต้นด้วย%ซึ่งเป็นข้อผิดพลาดทางไวยากรณ์ใน JavaScript ธรรมดา รายการคำสั่ง V8 พร้อมใช้งานชนิดนี้ถูกกำหนดในคำตอบของพอล มีอยู่%NeverOptimizeFunction()ในรายการนั่นซึ่งเป็นสิ่งที่ดูเหมือนว่าฉันจะต้องโทรและทำได้ น่าเสียดายที่ฟังก์ชั่นนั้นไม่ได้ทำตามที่ฉันหวังไว้ดังที่แสดงในสกรีนช็อตถัดไป ((( …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.