ฉันกำลังใช้system.time(expression)เพื่อวัดเวลาดำเนินการสำหรับฟังก์ชัน R
ผลลัพธ์ที่ฉันได้รับสำหรับการโทร
system.time(myfunction())
คือ:
user system elapsed
117.36 5.65 127.86
'ผู้ใช้' และ 'ระบบ' วัดอะไร?
ฉันกำลังใช้system.time(expression)เพื่อวัดเวลาดำเนินการสำหรับฟังก์ชัน R
ผลลัพธ์ที่ฉันได้รับสำหรับการโทร
system.time(myfunction())
คือ:
user system elapsed
117.36 5.65 127.86
'ผู้ใช้' และ 'ระบบ' วัดอะไร?
คำตอบ:
สิ่งนี้จะกล่าวถึงใน?proc.time( system.time()ส่งคืนวัตถุของคลาส"proc.time"):
Details:
‘proc.time’ returns five elements for backwards compatibility, but
its ‘print’ method prints a named vector of length 3. The first
two entries are the total user and system CPU times of the current
R process and any child processes on which it has waited, and the
third entry is the ‘real’ elapsed time since the process was
started.
....และ
Value:
....
The definition of ‘user’ and ‘system’ times is from your OS.
Typically it is something like
_The ‘user time’ is the CPU time charged for the execution of user
instructions of the calling process. The ‘system time’ is the CPU
time charged for execution by the system on behalf of the calling
process._
คำอธิบายที่ชัดเจนที่สุดที่ฉันเคยอ่านเกี่ยวกับความแตกต่างระหว่างuserและsystemเวลาที่ผ่านไปได้รับจากWilliam Dunlap ใน [R-help] :
"เวลา CPU ของผู้ใช้" ให้เวลา CPU ที่ใช้โดยกระบวนการปัจจุบัน (เช่นเซสชัน R ปัจจุบัน) และ "เวลา CPU ของระบบ" ให้เวลา CPU ที่ใช้โดยเคอร์เนล (ระบบปฏิบัติการ) ในนามของกระบวนการปัจจุบัน ระบบปฏิบัติการใช้สำหรับสิ่งต่างๆเช่นการเปิดไฟล์การทำอินพุตหรือเอาต์พุตการเริ่มกระบวนการอื่น ๆ และการดูนาฬิกาของระบบ: การดำเนินการที่เกี่ยวข้องกับทรัพยากรที่หลายกระบวนการต้องใช้ร่วมกัน
แม้ว่าจะ?proc.timeส่งคืนสิ่งที่คล้ายกัน แต่คำอธิบายนี้ก็เข้าใจง่ายกว่ามากสำหรับฉัน
คำอธิบายง่ายๆมีดังนี้
เวลาที่ผ่านไปคือเวลาที่เรียกเก็บจาก CPU สำหรับนิพจน์
User Timeคือเวลาของนาฬิกาแขวน เวลาที่คุณเป็นผู้ใช้พบ
โดยปกติแล้วทั้งสองครั้งจะค่อนข้างใกล้เคียงกัน แต่อาจแตกต่างกันไปในบางสถานการณ์ ตัวอย่างเช่น:
เนื่องจากสิ่งเหล่านี้เป็นเรื่องธรรมดาจาก Wikipedia:
คำว่า 'เวลา CPU ของผู้ใช้' อาจทำให้เข้าใจผิดได้เล็กน้อยในตอนแรก เพื่อความชัดเจนเวลาทั้งหมด (เวลาจริงของ CPU) คือการรวมกันของระยะเวลาที่ CPU ใช้ในการดำเนินการบางอย่างสำหรับโปรแกรมและระยะเวลาที่ CPU ใช้ในการดำเนินการเรียกเคอร์เนลของระบบในนามของโปรแกรม เมื่อโปรแกรมวนซ้ำผ่านอาร์เรย์โปรแกรมจะสะสมเวลา CPU ของผู้ใช้ ในทางกลับกันเมื่อโปรแกรมเรียกใช้การเรียกระบบเช่น exec หรือ fork จะเป็นการสะสมเวลา CPU ของระบบ
http://en.wikipedia.org/wiki/Time_(Unix)#User_Time_vs_System_Time
เนื่องจากตัวแปรเวลาเหล่านั้นถูกกำหนดโดยระบบปฏิบัติการของคุณคุณจึงสามารถดึงข้อมูลเกี่ยวกับวิธีคำนวณโดยดำเนินการman timeในเชลล์ของคุณ (บน Unix):
... สถิติเหล่านี้ประกอบด้วย (i) เวลาจริงที่ผ่านไประหว่างการเรียกและการยุติ (ii) เวลา CPU ของผู้ใช้ (ผลรวมของค่า
tms_utimeและtms_cutimeค่าในโครงสร้าง tms ที่ส่งกลับด้วยเวลา (2)) และ (iii) เวลา CPU ของระบบ (ผลรวมของค่าtms_stimeและtms_cstimeในโครงสร้าง tms ที่ส่งคืนตามเวลา (2))
คำจำกัดความของตัวแปรเวลาดังกล่าวสามารถพบได้ที่นี่ :
tms_utimeเวลา CPU ของผู้ใช้
tms_stimeเวลา CPU ของระบบ
tms_cutimeเวลา CPU ของผู้ใช้ของกระบวนการย่อยที่ถูกยกเลิก
tms_cstimeเวลา CPU ของระบบของกระบวนการย่อยที่ถูกยกเลิก
คำชี้แจงเกี่ยวกับความแตกต่างระหว่างเวลาของผู้ใช้และระบบมีอธิบายไว้ในคำตอบของ daroczig และที่อื่น ๆ ใน SO :
tms_utimeองค์ประกอบคือปริมาณของเวลาที่ใช้ในการดำเนินรหัสของคุณหรือรหัสในห้องสมุด C ที่tms_stimeองค์ประกอบคือจำนวนของเวลาที่ใช้ในเคอร์เนลรหัสการดำเนินการในนามของคุณ