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

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

2
วิธีอุ่นเครื่องคลาส Java เพื่อหลีกเลี่ยงการโทรช้าครั้งแรก?
ฉันกำลังทำโปรเจ็กต์ที่ฉันต้องการให้การเรียกใช้ API ทั้งหมดใช้เวลาน้อยกว่า 1 วินาที แต่ฉันกำลังประสบปัญหากับการโทรครั้งแรกไปยังแต่ละเส้นทางที่ช้ากว่าครั้งต่อไปนี้ ขณะนี้การโทร / ล็อกอินครั้งแรกใช้เวลา 3.6 วินาทีและโทรถัดไปใช้เวลา 170ms และเหมือนกันสำหรับเส้นทางอื่น ๆ ทั้งหมด ฉันค้นพบการใช้-XX:+TraceClassLoadingสิ่งนั้นในการโทรครั้งแรกชั้นเรียนถูกโหลดในหน่วยความจำและทำให้เกิดปัญหาประสิทธิภาพ อย่างไรก็ตามฉันไม่พบวิธีที่ง่ายในการโหลดคลาสทั้งหมดเมื่อเริ่มต้นและสำหรับแต่ละบริการใหม่ฉันต้องเพิ่มการเรียกวอร์มอัพใน ApplicationRunner ใครบ้างมีวิธีแก้ปัญหาในการโหลดคลาสของแอพพลิเคชั่น SpringBoot หรืออุ่นเครื่องเส้นทางทั้งหมด?

1
ทำไมการทำคลาสย่อยใน Python ทำให้ช้าลงมาก?
ผมทำงานในระดับที่เรียบง่ายที่ขยายdictและฉันรู้ว่าการค้นหาที่สำคัญและการใช้pickleมีมากช้า ฉันคิดว่ามันเป็นปัญหากับชั้นเรียนของฉันดังนั้นฉันจึงทำการทดสอบเล็กน้อย: (venv) marco@buzz:~/sources/python-frozendict/test$ python --version Python 3.9.0a0 (venv) marco@buzz:~/sources/python-frozendict/test$ sudo pyperf system tune --affinity 3 [sudo] password for marco: Tune the system configuration to run benchmarks Actions ======= CPU Frequency: Minimum frequency of CPU 3 set to the maximum frequency System state ============ CPU: use 1 logical CPUs: 3 …

2
Java 8: Class.getName () ทำให้การเชื่อมโยงสตริงช้าลง
เมื่อเร็ว ๆ นี้ฉันพบปัญหาเกี่ยวกับการต่อข้อมูลสตริง เกณฑ์มาตรฐานนี้สรุป: @OutputTimeUnit(TimeUnit.NANOSECONDS) public class BrokenConcatenationBenchmark { @Benchmark public String slow(Data data) { final Class<? extends Data> clazz = data.clazz; return "class " + clazz.getName(); } @Benchmark public String fast(Data data) { final Class<? extends Data> clazz = data.clazz; final String clazzName = clazz.getName(); return "class " + …

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

2
ค่าของการใช้ React.forwardRef กับ prop ref แบบกำหนดเอง
ฉันเห็นว่า React.forwardRef น่าจะเป็นวิธีที่ถูกทำนองคลองธรรมในการผ่านการอ้างอิงไปยังองค์ประกอบการทำงานของเด็กจากเอกสารตอบสนอง: const FancyButton = React.forwardRef((props, ref) => ( <button ref={ref} className="FancyButton"> {props.children} </button> )); // You can now get a ref directly to the DOM button: const ref = React.createRef(); <FancyButton ref={ref}>Click me!</FancyButton>; อย่างไรก็ตามข้อดีของการทำเช่นนี้คือเพียงแค่ผ่านเสาที่กำหนดเอง: const FancyButton = ({ innerRef }) => ( <button ref={innerRef} className="FancyButton"> {props.children} </button> )); …

3
ผู้ประกอบการที่เหลืออยู่ใน int ทำให้ java.util.Objects.requireNonNull?
ฉันพยายามทำให้ได้ประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้จากวิธีการภายในบางอย่าง รหัส Java คือ: List<DirectoryTaxonomyWriter> writers = Lists.newArrayList(); private final int taxos = 4; [...] @Override public int getParent(final int globalOrdinal) throws IOException { final int bin = globalOrdinal % this.taxos; final int ordinalInBin = globalOrdinal / this.taxos; return this.writers.get(bin).getParent(ordinalInBin) * this.taxos + bin; //global parent } ในผู้สร้างโปรไฟล์ของฉันฉันเห็นว่ามีการใช้ CPU 1% …

4
ทางเลือกที่รวดเร็วสำหรับ numpy.median.reduceat
เกี่ยวข้องกับคำตอบนี้มีวิธีที่รวดเร็วในการคำนวณค่ามัธยฐานของอาร์เรย์ที่มีกลุ่มที่มีจำนวนองค์ประกอบไม่เท่ากันหรือไม่? เช่น: data = [1.00, 1.05, 1.30, 1.20, 1.06, 1.54, 1.33, 1.87, 1.67, ... ] index = [0, 0, 1, 1, 1, 1, 2, 3, 3, ... ] แล้วฉันต้องการคำนวณความแตกต่างระหว่างจำนวนและค่ามัธยฐานต่อกลุ่ม (เช่นค่ามัธยฐานของกลุ่ม0คือ1.025ผลลัพธ์แรกคือ1.00 - 1.025 = -0.025) ดังนั้นสำหรับอาร์เรย์ด้านบนผลลัพธ์จะปรากฏเป็น: result = [-0.025, 0.025, 0.05, -0.05, -0.19, 0.29, 0.00, 0.10, -0.10, ...] เนื่องจากnp.median.reduceatยังไม่มี () ยังมีวิธีอื่นที่รวดเร็วในการบรรลุเป้าหมายนี้หรือไม่? …

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

1
สำเนาของรหัสเครื่องที่แน่นอนทำงานช้ากว่าฟังก์ชั่นเดิม 50%
ฉันทำการทดลองเล็กน้อยกับการใช้งานจาก RAM และหน่วยความจำแฟลชในระบบฝังตัว สำหรับการสร้างต้นแบบอย่างรวดเร็วและการทดสอบฉันกำลังใช้ Arduino Due (SAM3X8E ARM Cortex-M3) เท่าที่ฉันเห็น Arduino runtime และ bootloader ไม่ควรสร้างความแตกต่างที่นี่ นี่คือปัญหา: ฉันมีฟังก์ชั่น ( Calc ) ซึ่งเขียนใน ARM Thumb Assembly calcคำนวณตัวเลขและส่งคืน (> 1s รันไทม์สำหรับอินพุตที่กำหนด) ตอนนี้ฉันแยกรหัสเครื่องประกอบของฟังก์ชั่นนั้นด้วยตนเองและวางเป็นไบต์ดิบลงในฟังก์ชั่นอื่น ฟังก์ชั่นทั้งสองได้รับการยืนยันว่าอยู่ในหน่วยความจำแฟลช (ที่อยู่ 0x80149 และ 0x8017D ติดกัน) สิ่งนี้ได้รับการยืนยันผ่านการถอดแยกชิ้นส่วนและการตรวจสอบรันไทม์ void setup() { Serial.begin(115200); timeFnc(calc); timeFnc(calc2); } void timeFnc(int (*functionPtr)(void)) { unsigned long time1 …

2
prefetcher L2 HW มีประโยชน์จริง ๆ หรือไม่
ฉันอยู่ที่Whisky Lake i7-8565Uและวิเคราะห์เคาน์เตอร์ที่สมบูรณ์แบบและเวลาสำหรับการคัดลอกข้อมูลขนาด 512 KiB (ขนาดแคช L2 มากกว่าสองเท่า) และต้องเผชิญกับความเข้าใจผิดบางประการเกี่ยวกับการทำงานของ L2 HW prefetcher ในIntel Manual Vol.4 MSRมี MSR 0x1A4บิต 0 เป็นสำหรับการควบคุมการใช้ prefetcher L2 HW (1 เพื่อปิดการใช้งาน) พิจารณาเกณฑ์มาตรฐานดังต่อไปนี้: memcopy.h: void *avx_memcpy_forward_lsls(void *restrict, const void *restrict, size_t); memcopy.S: avx_memcpy_forward_lsls: shr rdx, 0x3 xor rcx, rcx avx_memcpy_forward_loop_lsls: vmovdqa ymm0, [rsi + 8*rcx] vmovdqa [rdi …

2
จัดเรียงอัลกอริทึมสำหรับ Excel / SharedStrings
ใน Excel พวกเขา 'บีบอัด' สตริงการแมปเป็นตัวเลข (แม้ว่าฉันไม่แน่ใจว่าคำว่าการบีบอัดถูกต้องในกรณีนี้) นี่คือตัวอย่างที่แสดงด้านล่าง: ในขณะที่สิ่งนี้ช่วยลดขนาดไฟล์และรอยเท้าหน่วยความจำโดยรวมแล้ว Excel จะเรียงลำดับอย่างไรในเขตข้อมูลสตริง ทุกสตริงเดียวจะต้องผ่านการค้นหาการแมป: และถ้าเป็นเช่นนั้นจะไม่เพิ่มค่าใช้จ่าย / ชะลอการทำเรียงลำดับในเขตข้อมูลสตริง (ถ้ามีค่า 1M, การค้นหาคีย์ 1M จะไม่ จิ๊บจ๊อย) คำถามสองข้อเกี่ยวกับเรื่องนี้: มีการใช้สตริงที่ใช้ร่วมกันภายในแอปพลิเคชัน Excel หรือเมื่อบันทึกข้อมูลเท่านั้น อะไรจะเป็นตัวอย่างอัลกอริธึมที่จะเรียงลำดับบนสนาม ภาษาใดก็ได้ (c, c #, c ++, python)

1
ทำไม Raku ถึงทำงานได้แย่มากกับอาเรย์หลายมิติ
ฉันสงสัยว่าทำไม Raku ถึงทำงานได้แย่มากในการจัดการกับอาร์เรย์หลายมิติ ฉันได้ทำการทดสอบอย่างรวดเร็วเพื่อเริ่มต้นเมทริกซ์ 2 มิติใน Python, C # และ Raku และเวลาที่ผ่านไปนั้นสูงอย่างน่าประหลาดใจในภายหลัง สำหรับ Raku my @grid[4000;4000] = [[0 xx 4000] xx 4000]; # Elapsed time 42 seconds !! สำหรับงูหลาม table= [ [ 0 for i in range(4000) ] for j in range(4000) ] # Elapsed time 0.51 seconds ค# int …
10 performance  raku 

2
พีซีวิดีโอฮาร์ดแวร์ที่ทันสมัยรองรับโหมดข้อความ VGA ใน HW หรือไม่ BIOS เลียนแบบ (ด้วยโหมดการจัดการระบบ) หรือไม่
สิ่งที่มันเกิดขึ้นในฮาร์ดแวร์คอมพิวเตอร์ที่ทันสมัย booted ใน 16 บิตมรดกโหมด BIOS MBR เมื่อคุณเก็บไบต์เช่น'1'(0x31) ลงในข้อความ VGA (โหมด 03) framebuffer ที่อยู่ทางกายภาพเชิงเส้นB8000? วิธีช้าเป็นmov [es:di], eaxร้านด้วยMTRRสำหรับภูมิภาคชุด UC? (การทดสอบทดลองบนแล็ปท็อป Kaby Lake iGPU หนึ่งตัวบ่งชี้ว่า clflushopt บน WC นั้นมีความเร็วเท่ากับ UC สำหรับหน่วยความจำ VGA โดยประมาณ แต่หากไม่มี clflushopt การจัดmovเก็บไปยังหน่วยความจำ WC จะไม่ออกจาก CPU และไม่อัปเดตหน้าจอเลย .) หากไม่ใช่ SMI สำหรับทุกร้านมีวิธีใดที่จะประมาณค่าใช้จ่ายนี้สำหรับหน่วยความจำ WB ในพื้นที่ผู้ใช้สำหรับการทดลองประสิทธิภาพโดยไม่ต้องบูตเครื่องใหม่ในโหมดจริงหรือไม่ (เช่นการใช้หน้า BSS เป็น framebuffer แบบหลอกที่ไม่ได้แสดงที่ใดก็ได้) ตัวอักษรที่สอดคล้องกันปรากฏขึ้นบนหน้าจอในการรีเฟรชครั้งต่อไป …

2
อะไรทำให้เกิดความแปรปรวนสูงในรอบนี้สำหรับการวนรอบแบบเรียบง่ายด้วย -O0 แต่ไม่ใช่ -O3 บน Cortex-A72
ฉันใช้การทดลองบางอย่างเพื่อรับรูทีนที่สม่ำเสมออย่างมากสำหรับโค้ดบางส่วน รหัสที่ฉันกำลังจับเวลาเป็นภาระงานที่ค่อนข้าง จำกัด ของ CPU: int cpu_workload_external_O3(){ int x = 0; for(int ind = 0; ind < 12349560; ind++){ x = ((x ^ 0x123) + x * 3) % 123456; } return x; } ฉันได้เขียนโมดูลเคอร์เนลที่ปิดใช้งานการขัดจังหวะจากนั้นเรียกใช้การทดลอง 10 ครั้งของฟังก์ชั่นด้านบนกำหนดเวลาการทดลองแต่ละครั้งโดยรับความแตกต่างในตัวนับรอบนาฬิกาจากก่อนและหลัง สิ่งอื่น ๆ ที่ควรทราบ: เครื่องคือ ARM Cortex-A72 โดยมี 4 ซ็อกเก็ตที่มี 4 คอร์แต่ละอัน (แต่ละอันมีแคช L1 …

4
มีวิธีใดที่เร็วกว่าในการตรวจสอบว่ารายการในรายการเทียบเท่าหรือไม่
นี่ฉันมีจำนวนเต็ม1:7สำหรับสี่พาร์ทิชันที่แตกต่างกันกล่าวคือ {1}, {2,3,4}, {5,6} และ {7} list(1,c(2,3,4),c(5,6),7)และพาร์ทิชันเหล่านั้นจะถูกเขียนในรายการคือ ฉันถือว่าพาร์ติชั่นเป็นชุด, ดังนั้นการเปลี่ยนแปลงองค์ประกอบที่แตกต่างกันภายในพาร์ติชั่นหนึ่งควรถูกจดจำเป็นพาร์ติชั่นเดียวกัน. ตัวอย่างเช่นlist(1,c(2,3,4),c(5,6),7)และlist(7,1,c(2,3,4),c(6,5))เทียบเท่า โปรดทราบว่าไม่มีการทำซ้ำสำหรับองค์ประกอบในรายการเช่นไม่ใช่list(c(1,2),c(2,1),c(1,2))เนื่องจากปัญหานี้กำลังพูดถึงพาร์ติชันพิเศษเหนือทั้งชุด ฉันแสดงรายการการเรียงลำดับที่แตกต่างกันบางรายการลงในรายการ lstด้านล่าง lst <- list(list(1,c(2,3,4),c(5,6),7), list(c(2,3,4),1,7,c(5,6)), list(1,c(2,3,4),7,c(6,5)), list(7,1,c(3,2,4),c(5,6))) และสิ่งที่ฉันต้องการทำคือการตรวจสอบว่าพีชคณิตทั้งหมดมีความเท่าเทียมกัน TRUEถ้าใช่แล้วเราจะได้รับผล สิ่งที่ฉันทำจนถึงตอนนี้คือการจัดเรียงองค์ประกอบภายในแต่ละพาร์ติชันและใช้setdiff()กับinterset()และunion()ตัดสินมัน (ดูรหัสของฉันด้านล่าง) s <- Map(function(v) Map(sort,v),lst) equivalent <- length(setdiff(Reduce(union,s),Reduce(intersect,s),))==0 อย่างไรก็ตามฉันคิดว่าวิธีนี้จะช้าเมื่อใดก็ตามที่ขนาดพาร์ติชันเพิ่มขึ้น มีวิธีเร็วกว่าที่จะทำหรือไม่ ขอบคุณล่วงหน้า! กรณีทดสอบบางอย่าง (ข้อมูลขนาดเล็ก) # should return `TRUE` lst1 <- list(list(1,c(2,3,4),c(5,6)), list(c(2,3,4),1,c(5,6)), list(1,c(2,3,4),c(6,5))) # should return `TRUE` lst2 <- …

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